
18.06.2011, 13:43
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Вопрос по методу send()
Уважаемые знатоки js и ajax, подключил ajax, сообщения в базу добавляются методом пост и все вроде работает правильно, одного не понимаю, если данные идут на сервер при помощи пост, то в send() я должен передать параметры урл, все что после ?. Вставил я туда параметры и убирал их отдуда, вставлял null, ajax продолжал работать. Зачем их передавать методу send и если это действительно нужно как их использовать после того как запрос отправлен?
|
|

18.06.2011, 22:05
|
 |
Mr. Jacob
|
|
Регистрация: 20.01.2011
Сообщений: 194
|
|
Если метод POST, то данные нужно передавать в send:
var data = 'user=' + encodeURIComponent(UserName.value) + '&email=' + encodeURIComponent(UserEmail.value) + '&text=' + encodeURIComponent(UserText.value); //Тут должны быть все твои данные из input, textarea или другое что нибудь
request.open('POST', 'mail.php', !0); //метод передачи данных, файл, асинхронный запрос,
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); //тип header,
request.send(data); //посылаем данные.
|
|

20.06.2011, 12:12
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
yashka525, google сказал то же самое, только я нигде не нашел этому объяснение, зачем? Все равно в урл ничего не меняется и если их надо передать, их же как-то можно использовать? То что ты написал, я примерно так и сделал.
|
|

20.06.2011, 12:28
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от DmitryT
|
Уважаемые знатоки js и ajax, подключил ajax, сообщения в базу добавляются методом пост и все вроде работает правильно, одного не понимаю, если данные идут на сервер при помощи пост, то в send() я должен передать параметры урл, все что после ?. Вставил я туда параметры и убирал их отдуда, вставлял null, ajax продолжал работать. Зачем их передавать методу send и если это действительно нужно как их использовать после того как запрос отправлен?
|
Что Вы понимаете под словами "ajax продолжал работать"? Аджаксу абсолютно пофиг, какие Вы передаете данные. Хоть параметры user, email, text,... хоть ничего не передаете, хоть null. Он просто отправляет POST-запрос на сервер по указанному в request.open() URL.
А отправленные аджаксом данные нужны на сервере для последующей их обработки и сохранения в базе. Проверьте еще раз, сохраняется ли что-то в базе если в переданных Вами данных пусто?
P.S. send(null); тоже будет работать. Но это режим передачи GET-запроса, а не POST.
|
|

21.06.2011, 10:51
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Маэстро,
так в том то и дело что сохраняются, я в сенд вставлял данные, ничего не вставлял, писал null и вообще send закомментировал, то что было в форме приходило в базу и было видно в браузере.
Последний раз редактировалось DmitryT, 21.06.2011 в 11:11.
|
|

21.06.2011, 14:43
|
 |
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Сообщение от DmitryT
|
только я нигде не нашел этому объяснение, зачем?
|
Затем, что количество символов в URL ограниченно, для это придумали POST, что бы отправлять большие данные в теле запроса. Если вы не собираетесь отправлять большой контент, а просто хотите получить данные, можно спокойной использовать GET.
П.С. Некоторые считают, что POST безопаснее из-за того, что запрос идёт в теле, хотя все куки и так остаются в хедере. Просто нужно использовать POST там, где он нужен.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|

21.06.2011, 23:21
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
Получилось вот что, когда я "искалечил" свой аджакс у меня продолжал работать пхп, это наверно неплохо для тех пользователей у которых отключен js, вроде страховки, но как теперь отловить где начинается аджакс, а где пхп, есть в пхп файле одно условие для записи сообщения в базу
if(!empty($_POST["nm"]) && !empty($_POST["txt"]) && $_POST["subm"] == 'go')
{
$query = "insert into message set userName='{$_POST["nm"]}',text='{$_POST["txt"]}'";
mysql_query($query) or die("Query failed : ".mysql_error());
}
пытаюсь вставить в if еще одно условие проверку на аджакс: isset($_SERVER['HTTP_X_REQUESTED_WITH'])
и тогда сообщение перестает приходить в базу. Подскажите как проверить что данные на сервер пришли с аджаксом. Это функция аджакса
function doLoad()
{
mess = document.getElementById('message');
mess.innerHTML = "<img src='images/upload.gif' width='32' height='8'><br><p>Ваш комментарий обрабатывается...</p>";
var xmlhttp = getXmlHttp();
var path = "ajaxPHP.php";
var data = 'nm=' + encodeURIComponent(document.getElementById('nm').value) + '&txt=' + encodeURIComponent(document.getElementById('txt').value) + 'ajax=' + true;
//var data = 'http://localhost/student/ajaxJS.php';
xmlhttp.open('post', path , true);
xmlhttp.onreadystatechange = function()
{
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
mess.innerHTML = xmlhttp.statusText; //alert(path);
}
}
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(data);
}
|
|

21.06.2011, 23:27
|
 |
Mr. Jacob
|
|
Регистрация: 20.01.2011
Сообщений: 194
|
|
Поставь & вот тут:
+ '*!*&*/!*ajax=' + true
И еще, может лучше сделать просто
+ '&ajax=true'
а на сервере проверить если ajax == true.
Последний раз редактировалось yashka525, 21.06.2011 в 23:31.
|
|

22.06.2011, 10:49
|
Аспирант
|
|
Регистрация: 19.02.2011
Сообщений: 53
|
|
yashka525,
все работает, кстати если присутствует параметр и ему не присвоено никакого значения, то его значение true по умолчанию, работает твой 1-й вариант, 2-й,
+ '&ajax'
и так тоже работает.
Спаси всех Господь.
ps
у меня работает ajax == true и почему-то отказывается работать isset($_SERVER['HTTP_X_REQUESTED_WITH']), если кому интересно почитайте что люди об этом пишут еще в 2007
http://softwaremaniacs.org/blog/2007...consistencies/
Последний раз редактировалось DmitryT, 22.06.2011 в 11:29.
|
|

22.06.2011, 14:23
|
Профессор
|
|
Регистрация: 02.07.2010
Сообщений: 642
|
|
Сообщение от DmitryT
|
Получилось вот что, когда я "искалечил" свой аджакс у меня продолжал работать пхп, это наверно неплохо для тех пользователей у которых отключен js, вроде страховки, но как теперь отловить где начинается аджакс, а где пхп
|
У Вас что, существует одновременно две страницы с одной и той же функцией отправки данных на сервер? Одна с помощью AJAX, а вторая с помощью FORM/submit ?
И вот это мне показалось прикольным:
'ajax=' + true
ajax == true
Первый раз вижу, чтобы в параметрах GET/POST запроса прямо передавали true как javascript а потом на сервере проверяли на true как PHP.
|
|
|
|